# 环境变量

`EMP` 支持在编译过程中向代码中注入环境变量或表达式，这对于区分运行环境、替换常量值等场景很有帮助。本章节会介绍环境变量的使用方式。

## 默认环境变量

### process.env.NODE_ENV

默认情况下，`EMP` 会自动设置 `process.env.NODE_ENV` 环境变量，在开发模式为 `'development'`，生产模式为 `'production'`。

你可以在 Node.js 和 client 代码中直接使用 `process.env.NODE_ENV`。

```ts
if (process.env.NODE_ENV === 'development') {
  console.log('this is a development log');
}
```

在开发环境，以上代码会被编译为：

```js
if (true) {
  console.log('this is a development log');
}
```

在生产环境，以上代码会被编译为：

```js
if (false) {
  console.log('this is a development log');
}
```

在代码压缩过程中，`if (false) { ... }` 会被识别为无效代码，并被自动移除。

## 命令行工具中快速定义变量
可以在 `npm script` 中，快速添加 cli 参数来达到区分环境的目的。
### -e --env
```json package.json
script: {
    "dev": "emp dev --env dev",
    "build": "emp build --env test",
    "build:prod": "emp build --env prod",
}
```
代码里面使用
```ts
if (process.env.env) {
    //...
}
```

### -ev, --env-vars
使用 -ev key=value 或 -ev key=value -ev key=value 定义一个或多个环境变量，可以在构建时候使用这些环境变量。

单个变量
```json package.json
script: {
    "dev": "emp dev --env-vars showLog=true",
    "build": "emp build --env-vars showLog=false",
    "build:prod": "emp build --env-vars showLog=false",
}
```
多个变量
```json package.json
script: {
    "dev": "emp dev --env-vars showLog=true --env-vars sourceMap=true",
    "build": "emp build --env-vars showLog=false --env-vars sourceMap=true",
    "build:prod": "emp build --env-vars showLog=false --env-vars sourceMap=false",
}
```

在配置中使用变量
```js emp-config.js
import {defineConfig} from '@empjs/cli'
export default defineConfig(store => {
    const {cliOptions} = store
    console.log('cliOptions', cliOptions.envVars)
}
```

执行 `run dev` 控制台输出

```bash
cliOptions { showLog: 'false', sourceMap: 'true' }
```

更多环境变量配置，请见[配置](zh/config/index)

